In the latter half of the twentieth century, there began a phenomenon known as the information revolution. While the information revolution is a historical development broader in scope than any one event or machine, no single device has come to represent the information revolution more than the digital electronic computer. The development of computer systems has surely been a revolution. Each year, computer systems grow faster, store more data, and provide more applications to their users.
Early computer systems were very expensive and difficult to use, capable of being programmed and manipulated by only a handful of highly-educated specialists. The cost of operating such computers was correspondingly high, and they were therefore used for only the most essential tasks. The dynamic which has driven the information revolution is the sustained reduction in the cost of computing. Thus, information which was too expensive to gather, store and process a few years ago, is now economically feasible to manipulate via computer. The reduced cost of information processing drives increasing productivity in a snowballing effect, because product designs, manufacturing processes, resource scheduling, administrative chores, and many other factors, are made more efficient.
The reduced cost of computing and the general availability of digital devices has brought an explosion in the volume of information stored in such devices. With so much information stored in digital form, it is naturally desirable to obtain wide access from computer systems. The volume of information dwarfs the storage capability of any one device. To improve information access, various techniques for allowing computing devices to communicate and exchange information with one another have been developed. Perhaps the most outstanding example of this distributed computing is the World Wide Web (often known simply as the “web”), a collection of resources which are made available throughout the world using the Internet. People from schoolchildren to the elderly are learning to use the web, and finding an almost endless variety of information from the convenience of their homes or places of work. Businesses, government, organizations and even ordinary individuals are making information available on the web, to the degree that it is now the expectation that anything worth knowing about is available somewhere on the web. Moreover, the web is not the only example of distributed computing. Many other distributed computing environments exist, often being non-public, but nevertheless containing very large stores of information. E.g. one or more so-called mainframe computers connected to multiple smaller computers or workstations via dedicated communications connections, a local area network, or otherwise, typically within a single company or organization, constitutes another type of distributed computing environment.
The web and many other distributed computing environments follow a client/server model. In a client/server model, information is typically exchanged as part of a two-way transaction, in which one device (a client) sends a request to another device (a server), the server then executing the request. The request is often a request for information stored by the server, but it may also be a request that the server store information from the client, that the server perform some processing of information from the client (which may be combined with other information), or may request some other service.
Although not always the case, there is a tendency to assign devices and systems in large computing network environments to specialized functions, so that certain devices or systems act primarily or exclusively as servers, while others act primarily as clients. Where this is the case, each server will typically service a very large number of requests, often from many different clients. Often, each individual request can be executed by the server in a very short time, but the cumulative number of requests can challenge the capacity of the server to respond in a reasonable time. Any operation that is performed with respect to a request, no matter how trivial, is multiplied many times when one considers the total workload of the server.
One type of operation that is performed repetitively be servers is error checking of input from the client. Various aspects of the request may be checked, such as the validity of the requested operation, the placement of fields, the range of values in the various fields, the validity of certain values, the validity of the communications connection, the authority of the client to make the request, and so forth. Individually, these are often rather trivial operations. However, each client request may cause multiple error checks to be performed, and these multiple checks for each request must further be multiplied by the number of requests the server receives. As a result, a server may devote a considerable proportion of its processing and other resources to making numerous error checks.
While there is a need for a certain amount of error checking, the error checking performed by servers is often redundant or unnecessary. Some clients perform some of the error checks themselves before submitting the requests to the server. Additionally, some client software which generates the request is so structured that it will never make certain types of errors which are checked, even though the software does not necessarily perform an explicit error check. Finally, there are some cases where the checked-for error is rare enough, and the consequences of its occurrence are not sufficiently important, that error checking the request at the server is not essential to the proper functioning of the distributed computing environment.
Although not necessarily recognized, there is a potential benefit to client/server methods and apparatus which intelligently and selectively reduce redundant or unnecessary error checking by the server.